package br.com.usjt.sge.estacionamento;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;

import br.com.usjt.sge.complemento.Endereco;

/*@autor Beji Lima 30 jul 2012 */
public class EstacionamentoDAOHibernate implements EstacionamentoDAO {

	private static final Logger logger = Logger
			.getLogger(EstacionamentoDAOHibernate.class.getName());
	private Session session;

	public void setSession(Session session) {
		this.session = session;
	}

	public void salvar(Estacionamento estacionamento) {

		try {

			this.session.save(estacionamento);
			logger.info("Estacionamento salvo na base de dados.");

		} catch (Exception e) {

			logger.error("Erro ao salvar o estacionamento - " + e.getMessage());
			throw new ExceptionInInitializerError();

		}
	}

	public void atualizar(Estacionamento estacionamento) {
		this.session.update(estacionamento);

	}

	public void excluir(Estacionamento estacionamento) {
		this.session.delete(estacionamento);

	}

	public Estacionamento carregar(Integer estacionamento) {

		return (Estacionamento) this.session.get(Estacionamento.class,
				estacionamento);
	}

	public List<Estacionamento> listar(Estacionamento estacionamento) {

		return this.session.createCriteria(Estacionamento.class).list();
	}

	@Override
	public Estacionamento buscarPorCNPJ(Long cpfcnpj) {
		try {

			String hql = "select e from Estacionamento e where e.cpfcnpj = :cpfcnpj";
			Query consulta = this.session.createQuery(hql);
			consulta.setLong("cpfcnpj", cpfcnpj);

			logger.info("Consultando estacionamento por cnpj na base de dados.");
			return (Estacionamento) consulta.uniqueResult();

		} catch (Exception e) {

			logger.error("Erro na consulta de estacionamentto com uso do cnpj : "
					+ e.getMessage());
			throw new ExceptionInInitializerError();

		}
	}

	@Override
	public List<Estacionamento> buscarEstacionamento(
			Estacionamento estacionamento) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Estacionamento buscarPorUsuario(Integer cod_usuario) {
		try {

			String hql = "select e from Estacionamento e where e.cod_usuario = :cod_usuario";
			Query consulta = this.session.createQuery(hql);
			consulta.setInteger("cod_usuario", cod_usuario);

			logger.info("Consultando estacionamento por usuario na base de dados.");
			return (Estacionamento) consulta.uniqueResult();

		} catch (Exception e) {

			logger.error("Erro na consulta de estacionamentto com uso do cnpj : "
					+ e.getMessage());
			throw new ExceptionInInitializerError();

		}
	}

	/**
	 * 
	 */
	@Override
	public List<Estacionamento> pesquisarPorCodigoEndereco(
			Integer codEndereco) {
		
		List<Estacionamento> resultado;
		
		String hql = "select e from Estacionamento e where e.endereco = :codigoEndereco";
		Query consulta = this.session.createQuery(hql);
		consulta.setInteger("codigoEndereco", codEndereco);
		
		resultado =  consulta.list();
				
		return resultado;
	}

}
